package old;
import old.interfaces.ZarzadcaPola;
import javax.microedition.lcdui.Font;
import javax.microedition.lcdui.Graphics;

public class Lista extends Pole
{
    private String[][] dane;
    
    private Font malaCzcionka = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);;
    private Font duzaCzcionka = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_MEDIUM);;
    
    public int kolorTekstu = 0x0;
    public int kolorWybranegoTla = 0xeecc44;
    public int kolorWybranegoTekstu = 0x0099ff;
    
    private int pierwszyElement = 0;
    private int wybranyElement = 0;
    private int widoczneElementy;
    
    private int wysokoscElementu;
    private int szerokoscElementu;
    private int wysokoscPierwszejLinii;
    private int wysokoscSuwaka = 30;
    
    private double wspolczynnikPrzesuniecia;
    
    public Lista(String[][] d)
    {
        dane = d;
    }

    public void przygotuj(ZarzadcaPola z, int szerokosc, int wysokosc)
    {
        zarzadca = z;
        wysokoscElementu = malaCzcionka.getHeight() + duzaCzcionka.getHeight() + 2 /* interlinia */ + 4 /* margines górny i dolny */;
        szerokoscElementu = szerokosc - 4 /* lewy i prawy margines */ - 9 /* szerokość suwaka */;
        wysokoscPierwszejLinii = duzaCzcionka.getHeight() + 2 /* interlinia */ + 2 /* margines górny */;
        widoczneElementy = wysokosc / wysokoscElementu;
        if(dane.length == 1)
            wspolczynnikPrzesuniecia = 0;
        else
            wspolczynnikPrzesuniecia = (double)(wysokosc - wysokoscSuwaka) / (dane.length - 1);
    }

    public void obslugaKlawiszy(int kod)
    {
        boolean odmaluj = false;
        switch(kod)
        {
            case -1:    // UP
                if(--wybranyElement < 0)
                    wybranyElement = dane.length - 1;
                odmaluj = true;
                break;
            case -2:    // DOWN
                if(++wybranyElement >= dane.length)
                    wybranyElement = 0;
                odmaluj = true;
                break;
            case -5:
                if(odbiorca != null)
                    odbiorca.zdarzeniePola(this, wybranyElement);
                break;
            default:
                System.out.println("Kod: " + kod);
                break;
        }
        if(odmaluj)
        {
            if(wybranyElement < pierwszyElement)
                pierwszyElement = wybranyElement;
            else if(wybranyElement >= pierwszyElement + widoczneElementy)
                pierwszyElement = wybranyElement - widoczneElementy + 1;
            zarzadca.odrysujPole();
        }
    }

    public void rysuj(Graphics g, int szerokosc, int wysokosc)
    {
        g.setColor(zarzadca.kolorTla());
        g.fillRect(0, 0, szerokosc, wysokosc);
        g.setColor(kolorTekstu);
        g.drawLine(szerokosc - 5, 0, szerokosc - 5, wysokosc - 1);
        g.fillRect(szerokosc - 8, (int)(wspolczynnikPrzesuniecia * wybranyElement), 7, wysokoscSuwaka);
        
        for(int i = pierwszyElement; i < pierwszyElement + widoczneElementy; ++i)
        {
            g.setColor(kolorTekstu);
            if(i == wybranyElement)
            {
                g.setColor(kolorWybranegoTla);
                g.fillRect(-2, 0, szerokoscElementu + 4, wysokoscElementu);
                g.setColor(kolorWybranegoTekstu);
            }
            g.setFont(duzaCzcionka);
            g.drawString(dane[i][0], 0, 2, 0);
            g.setFont(malaCzcionka);
            g.drawString(dane[i][1], 0, wysokoscPierwszejLinii, 0);
            g.translate(0, wysokoscElementu);
        }
    }
}
